Skip to content

chore(server-nestjs): rename role readonly to reader - #2654

Open
shikanime wants to merge 2 commits into
mainfrom
chore/rename-role-readonly-to-reader
Open

chore(server-nestjs): rename role readonly to reader#2654
shikanime wants to merge 2 commits into
mainfrom
chore/rename-role-readonly-to-reader

Conversation

@shikanime

@shikanime shikanime commented Sep 2, 2026

Copy link
Copy Markdown
Member

Issues liées

Aucune

Quel est le comportement actuel ?

Les rôles de type readonly utilisent les chemins OIDC suivants :

  • /console/readonly pour les rôles de projet
  • /readonly pour les rôles admin de plateforme

Les constantes sont nommées READONLY_* et les libellés français utilisent
"lecture seule".

Quel est le nouveau comportement ?

Les rôles sont renommés de readonly à reader :

  • Les chemins OIDC passent de /console/readonly à /console/reader et de
    /readonly à /reader
  • Les constantes READONLY_* deviennent READER_*
  • Les libellés français passent de "lecture seule" à "lecteur"
  • Le nom du rôle AdminRole Lecture Seule Plateforme devient Lecteur Plateforme
  • Le nom du rôle ProjectRole Lecture seule devient Lecture (cohérent avec le
    serveur legacy)
  • Une migration Prisma renomme les rôles existantes en base de données

Fichiers modifiés (22) :

  • apps/server-nestjs/ : constantes, services, specs, utils pour tous les
    modules (argocd, gitlab, nexus, registry, sonarqube, vault, project)
  • apps/server-nestjs/src/prisma/migrations/20260615100000_rename_role_readonly_to_reader/migration.sql : migration DB
  • apps/server/src/resources/project/queries.ts : cohérence serveur legacy
  • packages/shared/src/utils/permissions.ts : libellés partagés
  • plugins/argocd/src/infos.ts : plugin externe

Cette PR introduit-elle un breaking change ?

Oui — Les chemins OIDC /console/readonly et /readonly sont renommés en
/console/reader et /reader. Les groupes Keycloak correspondants, les
politiques Vault, et les configurations de plugins externes (ArgoCD, Nexus,
SonarQube, Registry, GitLab) doivent être réconciliés. La migration Prisma
gère la mise à jour des rôles existants en base, mais les groupes externes
(Keycloak, Vault) seront synchronisés automatiquement par les jobs de
réconciliation des plugins.

Procédure de migration :

  1. Appliquer la migration Prisma (20260615100000_rename_role_readonly_to_reader)
  2. Relancer la réconciliation des plugins (cron) pour synchroniser les groupes
    OIDC externes avec les nouveaux chemins
  3. Mettre à jour toute configuration personnalisée référençant readonly vers
    reader

Autres informations

  • 615 tests unitaires passent (vitest)
  • ESLint clean
  • La migration est idempotente (utilise WHERE sur les anciennes valeurs)

- Rename READONLY_* constants to READER_* across all server-nestjs modules
  (argocd, gitlab, nexus, registry, sonarqube, vault)
- Rename oidcGroup paths from /console/readonly to /console/reader
- Update AdminRole name from 'Lecture Seule Plateforme' to 'Lecteur Plateforme'
- Update ProjectRole name from 'Lecture seule' to 'Lecteur'
- Update French descriptions from 'lecture seule' to 'lecteur'
- Add Prisma migration 20260615100000_rename_role_readonly_to_reader to
  rename existing roles in database
- Update old server queries.ts for consistency
- Update shared permissions labels from 'Lecture seule globale' to
  'Lecture globale'
- Update external plugins/argocd/src/infos.ts constants and oidcGroups

Signed-off-by: Shikanime Deva <william.phetsinorath@shikanime.studio>
Co-authored-by: Automata <automata@shikanime.studio>
@shikanime
shikanime requested a review from a team as a code owner September 2, 2026 16:54
The infos.ts rename from readonly to reader was not reflected in
functions.ts and functions.spec.ts, causing TypeScript compilation
errors on the argocd plugin build.

- Rename imports/aliases from READONLY to READER
- Rename config keys platformReadonlyGroupPath -> platformReaderGroupPath
- Rename config keys projectReadonlyGroupPathSuffix -> projectReaderGroupPathSuffix
- Rename values keys platformReadonlyGroup -> platformReaderGroup
- Rename values keys projectReadonlyGroup -> projectReaderGroup

Signed-off-by: Shikanime Deva <william.phetsinorath@shikanime.studio>
Co-authored-by: Automata <automata@shikanime.studio>
@github-actions github-actions Bot added the built label Sep 2, 2026
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@shikanime shikanime added the preview Deploy preview app with Argo-cd label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Hey !

A preview of the application is available at : https://console-pr-2654.dso.cpin-hp.numerique-interieur.fr

Please be patient, deployment may take a few minutes.

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de test supprimée — voir la revue complète ci-dessous.

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de bissection supprimée (résidu d'outillage de revue).

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de bissection supprimée (résidu d'outillage de revue).

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de bissection supprimée (résidu d'outillage de revue).

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de bissection supprimée (résidu d'outillage de revue).

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue de bissection supprimée (résidu d'outillage de revue).

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict : Changements demandés (auto-revue : verdict posé en commentaire, l'API refuse REQUEST_CHANGES sur son propre PR)

Renommage cohérent dans l'ensemble et bien testé en unitaire (build, lint et les suites vitest vertes en local sur la branche). Trois incohérences de parcours subsistent toutefois : le module Nexus conserve des valeurs /console/readonly avec des clés de configuration orphelinées, le plugin gitlab garde ses anciens défauts, et les specs d'intégration assertent encore l'ancien chemin. La migration admin mérite aussi un découplage nom/chemin.

Points hors lignes modifiées :

  • [🟠 Important] plugins/gitlab/src/infos.ts garde DEFAULT_AUDITOR_GROUP_PATH et DEFAULT_PROJECT_REPORTER_GROUP_PATH_SUFFIX sur /console/readonly alors que apps/server-nestjs/src/modules/gitlab/gitlab.constants.ts passe à /console/reader dans cette même PR — le plugin créera donc des groupes avec l'ancien chemin. argocd est corrigé, gitlab pas ; appliquer le même renommage (constantes + value/placeholder).
  • [🟠 Important] Les specs e2e assertion encore /console/readonly (ex. apps/server-nestjs/test/sonarqube.e2e-spec.ts:102,107,149) ; les jobs d'intégration échoueront après cette PR. À mettre à jour dans la même branche.
  • [🟡 Nit] packages/test-utils/src/imports/data.ts:50-51 seed encore Lecture Seule Plateforme + /console/readonly — aligner la fixture sur les nouveaux noms.
  • [📚 Note] Le renommage des chemins OIDC et des politiques Vault est break-by-design et documenté comme tel : les jobs de réconciliation recréent les nouveaux groupes, mais rien ne supprime les anciens (platform--readonly, console-readonly, groupes Keycloak) ni ne re-liera les memberships existants. À expliciter dans la procédure de migration du corps de PR.

Revue d'outillage (mêmes constats, aucun blocage nouveau) : workspace jj console-pr2654 sur 1c931acb, build/lint/vitest au vert après génération Prisma + copie des .env locaux ; échecs initiaux tous environnementaux, aucun rejet lié au diff.

UPDATE "AdminRole"
SET
"name" = 'Lecteur Plateforme',
"oidcGroup" = '/reader'

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟠 Important] Ce UPDATE couple le nom et le chemin : toute ligne correspondant au nom ou à l'ancien chemin reçoit oidcGroup = '/reader' et le nom Lecteur Plateforme. Deux effets de bord : un rôle admin avec un chemin personnalisé (ex. /mon-organisation/readonly) est écrasé vers /reader, et un rôle avec un chemin /console/readonly mais un nom différent est renommé de force. Suggestion : découpler les critères — un UPDATE pour le nom (WHERE "name" = 'Lecture Seule Plateforme'), un pour le chemin (WHERE "oidcGroup" = '/readonly'), chacun ne modifiant que son champ.

// Default group paths granting write and read access at the platform level
export const DEFAULT_PLATFORM_WRITE_GROUP_PATHS = '/console/admin'
export const DEFAULT_PLATFORM_READ_GROUP_PATHS = '/console/readonly,/console/security'
export const DEFAULT_PLATFORM_READER_GROUP_PATHS = '/console/readonly,/console/security'

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟠 Important] Les constantes sont renommées vers READER mais leurs valeurs conservent /console/readonly — en décalage avec argocd, sonarqube, vault et registry qui passent tous à /console/reader. Par ailleurs, les clés de configuration changent (platformReadGroupPathsplatformReaderGroupPaths) sans migration des valeurs stockées : toute configuration admin existante sous l'ancienne clé est orphelinée et silencieusement remplacée par les défauts. Suggestion : aligner les valeurs sur /console/reader, et soit conserver les anciennes clés, soit migrer les lignes PluginDatastore concernées.

},
{
name: 'Lecture seule',
name: 'Lecture',

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 Nit] apps/server est normalement hors périmètre (cible : server-nestjs). La cohérence avec le serveur legacy se défend ; à confirmer que cette exception est assumée, sinon la déplacer dans une PR dédiée.

@@ -0,0 +1,20 @@
-- Rename the system-managed 'readonly'/'Lecture seule' role to 'reader'/'Lecteur' across AdminRole and ProjectRole

-- Rename ProjectRole: 'Lecture seule' -> 'Lecteur', '/console/readonly' -> '/console/reader'

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[✨ Éloge] Migration idempotente guidée par WHERE sur les anciennes valeurs — exactement ce qu'il faut pour un renommage de rôles système, et bien couverte par les specs mis à jour.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

built preview Deploy preview app with Argo-cd

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant